package com.enci.usbserial;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.util.Log;

/**
 * USB 权限广播接收器
 * 
 * 用于处理 USB 设备权限请求的系统广播响应。当用户对 USB 权限请求做出选择后，
 * 系统会发送广播，此接收器负责捕获并处理这些权限结果。
 * 
 * 主要功能：
 * 1. 监听 USB 权限请求的系统广播
 * 2. 解析权限授予/拒绝的结果
 * 3. 通过回调接口将结果传递给调用方
 * 4. 提供线程安全的权限结果处理
 * 
 * 使用流程：
 * 1. 创建接收器实例并传入回调接口
 * 2. 注册广播接收器到系统
 * 3. 发起 USB 权限请求
 * 4. 接收器自动处理权限结果并回调
 * 5. 在适当时机注销接收器
 * 
 * 注意事项：
 * - 必须在 AndroidManifest.xml 中声明相应的权限和接收器
 * - 接收器应该在不需要时及时注销，避免内存泄漏
 * - 回调方法在接收器线程中执行，如需更新UI请切换到主线程
 * 
 * @author USB Serial Plugin Team
 * @version 1.0.0
 * @since 2024
 */
public class UsbPermissionReceiver extends BroadcastReceiver {
    private static final String TAG = "UsbPermissionReceiver";
    public static final String ACTION_USB_PERMISSION = "com.enci.usbserial.USB_PERMISSION";
    
    private PermissionCallback callback;
    
    public interface PermissionCallback {
        void onPermissionResult(UsbDevice device, boolean granted);
    }
    
    // 默认构造函数，Android系统需要
    public UsbPermissionReceiver() {
        this.callback = null;
    }
    
    public UsbPermissionReceiver(PermissionCallback callback) {
        this.callback = callback;
    }
    
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        
        if (ACTION_USB_PERMISSION.equals(action)) {
            synchronized (this) {
                UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                boolean granted = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false);
                
                Log.d(TAG, "USB permission result: device=" + (device != null ? device.getDeviceName() : "null") + ", granted=" + granted);
                
                if (callback != null) {
                    callback.onPermissionResult(device, granted);
                }
            }
        }
    }
}